﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EveMarketsDAO;

namespace CoreEveMarkets
{
	public class ConsultationMarket
	{
		private int NumRegion { get; set; }
		private int NumSystem { get; set; }
		private int NumStation { get; set; }
		private int NumItem { get; set; }

		/// <summary>
		/// Constructeur - Je vais chercher les ID de la région,syteme, station et item, en fonction
		/// des noms passé en paramètre.
		/// </summary>
		/// <param name="nomRegion"></param>
		/// <param name="nomSysteme"></param>
		/// <param name="nomStation"></param>
		/// <param name="nomItem"></param>
		public ConsultationMarket(string nomRegion,string nomSysteme,string nomStation,string nomItem)
		{
			// Trouvons l'ID de l'item.
			NumItem = nomItem.Equals("Tout") ? 0 : ContexteDAO.NumeroIdItem(nomItem);

			// Maintenant les ID "géographique".
			// Si nous avons le nom de la station, nous pouvons récup les 3 ID.
			if(!String.IsNullOrEmpty(nomStation))
			{
				Tuple<int, int, int> lesTroisId = ContexteDAO.DonneIdStationSystemRegion(nomStation);
				NumRegion = lesTroisId.Item1;
				NumSystem = lesTroisId.Item2;
				NumStation = lesTroisId.Item3;
			}
			else
			{
				if (!String.IsNullOrEmpty(nomSysteme))
				{
					NumStation = 0; // Aucune station
					Tuple<int, int> deuxId = ContexteDAO.DonneIdSystemRegion(nomSysteme);
					NumRegion = deuxId.Item1;
					NumSystem = deuxId.Item2;
				}
				else
				{
					NumStation = 0; // Aucune station
					NumSystem = 0; // Aucun système
					NumRegion = ContexteDAO.DonneIdRegion(nomRegion);
				}
			}
		}

		/// <summary>
		/// Permet d'envoyer la liste de prix en fonction des informations dans l'objet.
		/// </summary>
		/// <returns></returns>
		public IEnumerable<MarketsCentral> AfficherPrixSellOrders()
		{
			if (NumStation != 0)
			{
				return ContexteDAO.FonctionMarkets.AffichageMarketsStations(this.NumStation, this.NumItem);
			}
			
			if (NumStation == 0 && NumSystem != 0)
			{
				return ContexteDAO.FonctionMarkets.AfficherMarketsSystemes(this.NumSystem, this.NumItem);
			}

			return ContexteDAO.FonctionMarkets.AffichageMarketsRegion(this.NumRegion, this.NumItem);
		}

		/// <summary>
		/// Permet d'envoyer la liste de prix en fonction des informations dans l'objet.
		/// </summary>
		/// <returns></returns>
		public IEnumerable<MarketsCentral> AfficherPrixBuyOrders()
		{
			if (NumStation != 0)
				return ContexteDAO.FonctionMarkets.AffichageMarketsStationsBuyOrders(this.NumStation, this.NumItem);

			if (NumStation == 0 && NumSystem != 0)
				return ContexteDAO.FonctionMarkets.AfficherMarketsSystemesBuyOrders(this.NumSystem, this.NumItem);

			return ContexteDAO.FonctionMarkets.AffichageMarketsRegionBuyOrders(this.NumRegion, this.NumItem);
		}


		/// <summary>
		/// Permet d'envoyer la liste de prix en fonction des informations dans l'objet.
		/// </summary>
		/// <returns></returns>
		public IEnumerable<MarketsCentral> AfficherPrixSellOrdersTout()
		{
			if (NumStation != 0)
			{
				return ContexteDAO.FonctionMarkets.AffichageMarketsStations(this.NumStation);
			}

			if (NumStation == 0 && NumSystem != 0)
			{
				return ContexteDAO.FonctionMarkets.AfficherMarketsSystemes(this.NumSystem);
			}

			return ContexteDAO.FonctionMarkets.AffichageMarketsRegion(this.NumRegion);
		}

		/// <summary>
		/// Permet d'envoyer la liste de prix en fonction des informations dans l'objet.
		/// </summary>
		/// <returns></returns>
		public IEnumerable<MarketsCentral> AfficherPrixBuyOrdersTout()
		{
			if (NumStation != 0)
				return ContexteDAO.FonctionMarkets.AffichageMarketsStationsBuyOrders(this.NumStation);

			if (NumStation == 0 && NumSystem != 0)
				return ContexteDAO.FonctionMarkets.AfficherMarketsSystemesBuyOrders(this.NumSystem);

			return ContexteDAO.FonctionMarkets.AffichageMarketsRegionBuyOrders(this.NumRegion);
		}

	}
}
